package cn.huaqingcheng.tool.core.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import jakarta.validation.constraints.NotEmpty;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Stream;

/**
 * ListWrapper
 * 包装一个 list, 很多时候是因为 HTTP 请求入参不能直接用 {@link List}
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class ListWrapper<E> implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 列表
     */
    @NotEmpty(message = "参数列表不能为空")
    public List<E> list;

    /**
     * 工具方法
     */
    @SuppressWarnings("unused")
    public Stream<E> stream() {
        if (list == null) {
            return Stream.empty();
        }
        return list.stream();
    }

    /**
     * 工具方法
     */
    public void each(Consumer<E> consumer) {
        if (list != null) {
            list.forEach(consumer);
        }
    }

}
